package com.pkche.core.advanced.util.page;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

/**
 * 
 * <h6>自动检索处理器</h6>
 *
 * User: Qiang <br/>
 * Describe： 用于分页列表中显示<br/>
 *
 * @date 2015年3月4日 上午11:52:32
 */
public class AutoQueryHandler {
	// 当前页码，默认为第一页
	private int pageNumber = 0;
	// 参数
	private Map<String, Object> param = new HashMap<String, Object>();
	// 分页处理器
	private PageTagHandler pageHandler;

	/**
	 * 构造一个自动处理搜索请求字符串实例
	 * 
	 * @param req
	 * @param length
	 * @param queryFields
	 *            允许参与查询的字段名称，名称与对应的Mapper.xml中的参数名相同
	 */
	public AutoQueryHandler(HttpServletRequest req, int length,
			String... queryFields) {
		// 获取页码字符串
		String pstr = req.getParameter("p");
		if (pstr != null) {
			try {
				pageNumber = Integer.parseInt(pstr);
			} catch (NumberFormatException e) {
				// 忽略任何异常
			}
		}
		// 需要跳过的倍数
		int mult = pageNumber == 0 ? pageNumber : pageNumber - 1;
		param.put("length", length);
		param.put("limit", mult * length);
		// 遍历查询字符串map
		if (queryFields != null) {
			for (String f : queryFields) {
				String value = req.getParameter(f);
				// 转码
				if (value != null) {
					// get提交，需要转码
					try {
						value = URLDecoder.decode(value, "utf-8");
						value = URLDecoder.decode(value, "utf-8");
					} catch (UnsupportedEncodingException e) {
						// TODO Auto-generated catch block
						//e.printStackTrace();
					}
					// 添加参数
					param.put(f, value.trim());
				}
			}
		}
		pageHandler = new PageTagHandler(pageNumber, length);
	}

	/**
	 * 返回当前分页查询对象map
	 * 
	 * @return
	 */
	public Map<String, Object> paramMap() {
		return param;
	}

	/**
	 * 返回分页处理器
	 * 
	 * @return
	 */
	public PageTagHandler pageHandler() {
		return pageHandler;
	}

}
